package com.chen.controller;

import com.chen.pojo.common.PageResult;
import com.chen.pojo.vo.OrderPartnerVo;
import com.chen.pojo.vo.ReportVo;
import com.chen.service.ReportService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * @author chen
 * @version 1.0
 * @create_date 2025/8/20
 * 首页统计功能
 */
@Slf4j
@RestController
@RequestMapping("/api/order-service/report")
public class ReportController {
    @Autowired
    private ReportService reportService;

    // 获取一定日期范围之内的合作商分成汇总数据
    @GetMapping("/partnerCollect")
    public PageResult<OrderPartnerVo> getPartnerCollect(
            Integer pageIndex, Integer pageSize,
            String partnerName,
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate start,
            @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate end) {
        return reportService.getPartnerCollect(pageIndex, pageSize, start, end, partnerName);
    }

    @GetMapping("/totalBill")
    public BigDecimal getTotalBill(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime start,
                                   @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime end) {
        return reportService.getTotalBill(start, end);
    }

    /**
     * 获取指定时间内的订单总量
     *
     * @param start 开始时间
     * @param end   结束时间
     * @return 结果
     */
    @GetMapping("/orderCount")
    public Long getOrderCount(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime start,
                              @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime end) {
        log.info("查询开始时间：{}，结束时间：{} 之内的订单总量", start, end);
        return reportService.getOrderCount(start, end);
    }

    /**
     * 获取指定时间内的订单总销售额
     *
     * @param start 开始时间
     * @param end   结束时间
     * @return 结果
     */
    @GetMapping("/orderAmount")
    public BigDecimal getOrderAmount(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime start,
                                     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime end) {
        log.info("查询开始时间：{}，结束时间：{} 之内的订单总销售额", start, end);
        return reportService.getOrderAmount(start, end);
    }

    /**
     * 根据地区汇总销售额数据(销售量分布)
     *
     * @param start 开始时间
     * @param end   结束时间
     * @return 结果
     */
    @GetMapping("/regionCollect/{start}/{end}")
    public ReportVo getRegionCollectAmount(
            @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @PathVariable LocalDateTime start,
            @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @PathVariable LocalDateTime end) {
        return reportService.getRegionCollectAmount(start, end);
    }

}
